package com.libre.auth.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.libre.auth.entity.Permission;
import com.libre.auth.entity.Role;
import com.libre.auth.service.PermissionService;
import com.libre.auth.service.RoleService;
import com.libre.common.base.BaseController;
import com.libre.common.utils.PageUtil;
import com.libre.common.utils.ResultUtil;
import com.libre.common.vo.PageVo;
import com.libre.common.vo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Description
 * @Author 王帅
 * @Date 2020/7/29 10:15
 * @Version 1.0
 */
@Slf4j
@RequestMapping("/role")
@RestController
public class RoleController extends BaseController {

    @Autowired
    private RoleService roleService;
    @Autowired
    private PermissionService permissionService;

    @GetMapping("/findPage")
    public Result<IPage<Role>> findPage(@ModelAttribute PageVo pageVo, @ModelAttribute Role role) {
        IPage<Role> page = roleService.findPage(PageUtil.initMpPage(pageVo), role);
        return new ResultUtil<IPage<Role>>().setData(page);
    }


    @GetMapping("/findList")
    public Result<List<Role>> findList(@ModelAttribute Role role) {
        List<Role> list = roleService.findList(role);
        return new ResultUtil<List<Role>>().setData(list);
    }

//    @PostMapping("/save")
//    public Result save(@RequestBody Role role) {
//        //非空校验
//        VerifyUtil.notEmpty("status",role.getStatus());
//        VerifyUtil.notEmpty("role_name",role.getRole_name());
//        roleService.save(role);
//        if(role.getDepts() != null){
//            List<DepartRole> drs = Lists.newArrayList();
//            for (Depart depart : role.getDepts()) {
//                DepartRole dr = new DepartRole();
//                dr.setDepart_id(depart.getId());
//                dr.setRole_id(role.getId());
//                drs.add(dr);
//            }
//            departRoleService.saveBatch(drs);
//        }
//        return new ResultUtil().setSuccessMsg(ResultEnums.OK.getReasonPhraseCN());
//    }
//
//    @PostMapping("/update")
//    public Result update(@RequestBody Role role) {
//        //非空校验
//        VerifyUtil.notEmpty("id",role.getId());
//        VerifyUtil.notEmpty("status",role.getStatus());
//        VerifyUtil.notEmpty("role_name",role.getRole_name());
//        roleService.updateById(role);
//        // 编辑部门角色
//        if(role.getDepts() != null){
//            QueryWrapper<DepartRole> queryWrapper = new QueryWrapper<>();
//            queryWrapper.eq("role_id", role.getId());
//            List<DepartRole> list = departRoleService.list(queryWrapper);
//            List<String> collect = list.stream().map(DepartRole::getId).collect(Collectors.toList());
//            if (collect.size() > 0) { //删除
//                departRoleService.removeByIds(collect);
//            }
//            // 添加
//            List<DepartRole> drs = Lists.newArrayList();
//            for (Depart depart : role.getDepts()) {
//                DepartRole dr = new DepartRole();
//                dr.setDepart_id(depart.getId());
//                dr.setRole_id(role.getId());
//                drs.add(dr);
//            }
//            departRoleService.saveBatch(drs);
//        }
//        return new ResultUtil().setSuccessMsg(ResultEnums.OK.getReasonPhraseCN());
//    }
//
//
//    @PostMapping("/delete/{id}")
//    public Result delete(@PathVariable String id) {
//        Role role = new Role();
//        role.setId(id);
//        role.setIs_delete("1");
//        roleService.updateById(role);
//        QueryWrapper<RolePermission> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("role_id", id);
//        rolePermissionService.remove(queryWrapper);
//        return new ResultUtil().setSuccessMsg(ResultEnums.OK.getReasonPhraseCN());
//    }


    // 权限树
    @GetMapping("/permissionTree")
    public Result<List<Permission>> permissionTree(@ModelAttribute Permission permission) {
        List<Permission> list = permissionService.menuTree(permission);
        return new ResultUtil<List<Permission>>().setData(list);
    }

}
